// 获取小程序实例
const app = getApp();

// 导入utils类
let utils = require('../../js/utils');

Page({

  /**
   * 页面的初始数据
   */
  data: {
    // 骨架屏加载状态
    loading: true,
    // 账目类型
    subbarData: [
      {title: '支出', type: 'zc'},
      {title: '收入', type: 'sr'},
      // {title: '转账', type: 'zz'}
    ],
    // 账目类型选中索引
    subbarIndex: 0,
    // 金额输入框的值
    money: '',
    // 账目子分类数据
    subtypeData: [],
    // 账目子分类选中索引
    subtypeIndex: -1,
    // 账目子分类当前页
    subtypePageIndex: 0,
    // 每一页多少个数据
    pageCount: 10,
    // 日期的值
    date: '',
    // 起始时间
    startDate: '',
    // 结束时间
    endDate: '',
    // 备注
    remarks: '',
    // 标签数据
    labelData: [
      {title: '现金', class: 'xj'},
      {title: '微信', class: 'wx'},
      {title: '支付宝', class: 'zfb'},
      {title: '银行卡', class: 'yhk'},
      {title: '信用卡', class: 'xyk'},
      // {title: '自定义+', class: 'add'}
    ],
    // 标签索引
    labelIndex: -1,
    // 报销选项状态
    offsetChecked: false,
    // 是否登录
    isLogin: false
  },

  // 切换账目类型函数
  toggleSubbarIndex(e) {
    // 获取事件对象中的目标，的自定义data，的index
    let index = e.currentTarget.dataset.index;
    let key = e.currentTarget.dataset.key;
    // 如果点击同一个结束函数
    if(index === this.data[key]) {
      return;
    }
    // 修改data只能通过setDate函数
    this.setData({
      [key]: index
    })
    // 
  },

  // 更新输入框的数据(金额,日期,备注)
  upInputData(e) {
    let key = e.currentTarget.dataset.key;
    this.setData({
      [key]: e.detail.value
    })
    // 
  },

  // 获取账目子分类数据
  getSubtypeData() {
    // 调用云函数方法
    wx.cloud.callFunction({
      // name云函数名称
      name: 'get_subtype',
      // 传递给云函数的参数
      data: {}
    }).then (res => {
      // 
      let data = res.result.data;
      for(let i = 0; i < data.length; i += this.data.pageCount) {
        // 新建一个对象用于保存每页数据
        // activeIndex记录当前页被选中分类的索引
        let obj = {
          activeIndex: -1,
          data: []
        }
        // 切割当前页的数据
        let pageData = data.slice(i, this.data.pageCount + i);
        obj.data.push(...pageData);
        // 将格式化后的数据存入账目子类型数据中
        this.data.subtypeData.push(obj);
      }
      // 通过方法将数据同步更新(因为页面的数据需要此方法才能更新)
      this.setData({
        subtypeData: this.data.subtypeData
      })
    }).catch(err => {
      
    })
  },

  // 切换账目子分类选中索引
  toggleSubtypeIndex(e) {
    // 获取当前页
    let page = e.currentTarget.dataset.page;
    // 获取当前选择项索引
    let index = e.currentTarget.dataset.index;
    // 判断是否同一页同一项
    if(page === this.data.subtypePageIndex && index === this.data.subtypeIndex) {
      // 
      return;
    }
    // 排除其他页的选中项
    this.data.subtypeData.forEach((v, i) => {
      // 排除同页
      if(i === page) {
        return;
      }
      v.activeIndex = -1;
    })
    // 激活当前点击项
    this.data.subtypeData[page].activeIndex = index;
    this.setData({
      subtypeData: this.data.subtypeData
    })
    // 同步当前页
    this.data.subtypePageIndex = page;
    // 同步当前项
    this.data.subtypeIndex = index;
    // 
  },

  // 初始化时间
  initDate() {
    let currentTime = new Date();
    this.setData({
      date: utils.formatDate(currentTime, 'yyyy-MM-dd'),
      endDate: utils.formatDate(currentTime, 'yyyy-MM-dd')
    })
  },

  // 切换标签选中状态
  toggLabelIndex(e) {
    // 获取事件对象中的目标，的自定义data，的index
    let index = e.currentTarget.dataset.index;
    let key = e.currentTarget.dataset.key;
    // // 如果点击最后一个退出(禁用)
    // if(index === this.data.labelData.length - 1) {
    //   
    //   return;
    // }
    // 如果点击同一个取消选中
    if(index === this.data[key]) {
      index = -1;
    }
    // 修改data只能通过setDate函数
    this.setData({
      [key]: index
    })
    // 
  },

  // 切换报销选中状态
  toggOffsetIndex(e) {
    let key = e.currentTarget.dataset.key;
    this.setData({
      [key]: !this.data.offsetChecked
    })
    // 
  },

  // 记一笔
  submit() {
    if(this.data.subbarIndex < 0) {
      return wx.showToast({
        title: '请选择账目',
        icon: 'none',
        duration: 2000
      })
    }
    if(this.data.money <= 0) {
      return wx.showToast({
        title: '请入正确的金额',
        icon: 'none',
        duration: 2000
      })
    }
    if(this.data.subtypeIndex < 0) {
      return wx.showToast({
        title: '请选择分类',
        icon: 'none',
        duration: 2000
      })
    }
    if(this.data.date.length <= 0) {
      return wx.showToast({
        title: '请选择正确的时间',
        icon: 'none',
        duration: 2000
      })
    }
    let subbar = this.data.subbarData[this.data.subbarIndex];
    let money = Number(this.data.money);
    money = money.toFixed(2);
    let subtype = this.data.subtypeData[this.data.subtypePageIndex].data[this.data.subtypeIndex];
    let date = this.data.date;
    let remarks = this.data.remarks;
    let label = this.data.labelData[this.data.labelIndex];
    // 加入时间字段(便于查找记录)
    let time = new Date();
    if(label === undefined) {
      label = ''
    }
    let offsetChecked = this.data.offsetChecked;
    wx.showLoading({
      title: '加载中...',
    })
    wx.cloud.callFunction({
      name: 'add_booking',
      data: {
        subbar,
        money,
        subtype,
        date,
        remarks,
        label,
        offsetChecked,
        time
      }
    }).then(res => {
      // 
      if(res.result._id) {
        wx.hideLoading();
        wx.showToast({
          title: '添加成功',
          icon: 'none',
          duration: 2000
        })
        this.data.subtypeData.forEach((v, i) => {
          v.activeIndex = -1;
        })
        // 重置数据
        this.setData({
          money: '',
          subtypeData: this.data.subtypeData,
          subtypeIndex: -1,
          subtypePageIndex: 0,
          date: utils.formatDate(new Date(), 'yyyy-MM-dd'),
          remarks: '',
          labelIndex: -1,
          offsetChecked: false
        })
      }
    }).catch(err => {
      
      wx.hideLoading();
    })
  },

  // // 获取用户授权信息
  // getUserInfo(res) {
  //   
  //   // 字段存在表示用户允许授权
  //   if(res.detail.userInfo) {
  //     wx.showLoading({
  //       title: '加载中...',
  //     })
  //     wx.cloud.callFunction({
  //       name: 'add_userInfo',
  //       data: {
  //         ...res.detail.userInfo
  //       }
  //     }).then(r => {
  //       wx.hideLoading();
  //       app.globalData.isLogin = true;
  //       app.globalData.nickName = res.detail.userInfo.nickName;
  //       app.globalData.avatarUrl = res.detail.userInfo.avatarUrl;
  //       this.setData({
  //         userInfo: {
  //           nickName: res.detail.userInfo.nickName,
  //           avatarUrl: res.detail.userInfo.avatarUrl
  //         },
  //         isLogin: true,

  //         test: res.detail.userInfo.nickName
  //       })
  //     }).catch(err => {
  //       
  //       wx.hideLoading();
  //     })
  //   }
  // },

  // 获取用户授权信息
  getUserInfo() {
    wx.getUserProfile({
      desc: '用于完善会员资料', 
      success: (res) => {
        // 
        wx.showLoading({
          title: '加载中...',
        })
        wx.cloud.callFunction({
          name: 'add_userInfo',
          data: {
            ...res.userInfo
          }
        }).then(r => {
          wx.hideLoading();
          wx.showToast({
            title: '登录成功',
            icon: 'none',
            duration: 2000
          });
          app.globalData.isLogin = true;
          app.globalData.nickName = res.userInfo.nickName;
          app.globalData.avatarUrl = res.userInfo.avatarUrl;
          this.setData({
            userInfo: {
              nickName: res.userInfo.nickName,
              avatarUrl: res.userInfo.avatarUrl
            },
            isLogin: true
          })
        }).catch(err => {
          
          wx.hideLoading();
        })
      },
      fail: (err) => {
        
      }
    })
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    // 获取账目子分类数据
    this.getSubtypeData();
    // 初始化时间
    this.initDate();
    // 限定起始时间
    this.setData({
      startDate: app.globalData.startDate
    })
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
    // this.setData({
    //   loading: false
    // })
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    // let status = app.globalData.isLogin;
    // // 
    // if (status) {
    //   this.setData({
    //     isLogin: true,
    //     userInfo: {
    //       nickName: app.globalData.nickName,
    //       avatarUrl: app.globalData.avatarUrl
    //     }
    //   })
    // }
    // 获取用户授权信息
    wx.cloud.callFunction({
      name: 'check_login'
    }).then(res => {
      // 
      if(res.result.data.length > 0) {
        app.globalData.isLogin = true;
        app.globalData.nickName = res.result.data[0].nickName;
        app.globalData.avatarUrl = res.result.data[0].avatarUrl;
        this.setData({
          isLogin: true,
          userInfo: {
            nickName: res.result.data[0].nickName,
            avatarUrl: res.result.data[0].avatarUrl
          }
        })
      }
      this.setData({
        loading: false
      })
    }).catch(err => {
      
      this.setData({
        loading: false
      })
    })
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})